/**
 * 
 */
package com.block.common.security.util;


import com.alibaba.fastjson.JSONObject;
import com.block.common.service.LogFactory;
import com.block.common.util.StringUtil;
import com.block.common.vo.ResponseVo;
import com.block.db.entity.AppEncrypt;
import com.block.common.security.service.factory.AppEncryptFactory;
import com.block.common.security.service.factory.ReqDataTransferFactory;
import com.block.common.security.service.factory.ReturnDataFactory;
import org.slf4j.Logger;

import java.util.Date;


/**
 * 
 * APP通信接口工具
 */
public class ApiUtil {
//	private static Logger logger = LogManager.getLogger(ApiUtil.class);
private static final Logger log = LogFactory.getAppReq();
	/**
	 * 随机签名、加密长度【加密和验签用】
	 */
	private static final int RANDOM_KEY_LENGTH = 8;
	/**
	 * 用秘钥解码【密码】
	 * @param password
	 * @return
	 */
	public static String deCodePassword(String password)
	{
		return password;//EncDecUtil.dec(PropertyUtil.getEncodePwdKey(), password);
	}
	
	/**
	 * 数据加密
	 * @param appEncrypt
	 * @param tranData
	 * @return
	 * 2016年10月12日 上午10:27:52
	 */
	public static String encode(AppEncrypt appEncrypt, String tranData, String cipherText) {
		boolean isEncrypt = appEncrypt.getIsEncrypt().equals(AppEncryptFactory.IS_ENCRYPT);
//		logger.info("是否需要加密",isEncrypt);
		if (isEncrypt) {
            return AppEncryptFactory.getAppEncryptManner(appEncrypt.getEncryptType()).encode(appEncrypt, tranData, cipherText);
        }
		return tranData;
	}

	/**
	 * 数据解密
	 * @param appEncrypt
	 * @param tranData
	 * @return
	 * 2016年10月12日 上午10:29:18
	 */
	public static String decode(AppEncrypt appEncrypt, String tranData, String cipherText) {
		boolean isEncrypt = appEncrypt.getIsEncrypt().equals(AppEncryptFactory.IS_ENCRYPT);
		if (isEncrypt) {
            return AppEncryptFactory.getAppEncryptManner(appEncrypt.getEncryptType()).decode(appEncrypt, tranData, cipherText);
        }
		return tranData;
	}
	
	/**
	 * 获得随机签名key
	 * @return
	 * 2016年10月12日 下午4:28:40
	 */
	public static String getRandomKey()
	{
		return StringUtil.getStringRandom(RANDOM_KEY_LENGTH);
	}
	
	/**
	 * 返回json处理
	 * @param returnJson
	 * @param appEncrypt
	 * @param version
	 * 2016年10月12日 下午5:06:44
	 */
	public static String dealReturnJson(ResponseVo returnJson, AppEncrypt appEncrypt, String version, Date startDate, String actionName)
	{
		String returnMsg= ReturnDataFactory.getReturnDataService(appEncrypt.getRetEncryptType()).
			dealReturnData(appEncrypt, returnJson, version,startDate);

			log.info("时间:{},【URI】{}【返回的数据】{}",startDate,actionName,returnMsg);
			if (returnMsg.contains("mobile")){
				log.info("【URI】{} 【message】包含手机号",returnMsg);
			}

		return returnMsg;
	}

	/**
	 * 请求数据处理
	 * @param appEncrypt
	 * @param jsonObject
	 * @param methodName
	 * @return
	 * 2016年12月19日 下午7:06:00
	 */
	public static JSONObject dealReqData(AppEncrypt appEncrypt, JSONObject jsonObject,
                                         String methodName) throws Exception {
		return ReqDataTransferFactory.getReqDataTransferService(appEncrypt.getEncryptType())
			.transferReqData(appEncrypt, jsonObject, methodName);
	}
	
}

